package edu.cgpi.core.comando;

import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;

import javax.swing.SwingUtilities;

import edu.cgpi.core.entidade.Ponto;
import edu.cgpi.core.entidade.grafico.Imagem;
import edu.cgpi.core.util.FabricaImagens;
import edu.cgpi.core.util.TipoImagem;
import edu.cgpi.view.GerenciadorUI;
import edu.cgpi.view.PainelDesenho;

/**
 * Simula um m�todo de constru��o que envolve diversos cliques.
 * A cada clique, a Imagem j� se encontra em estado finalizado.
 * 
 * @author Itikawa
 */
public class CliqueArrasteMultiplo extends AbstractComando {

	private Ponto pontoAtual;
	private List<Ponto> pontos;
	
	public CliqueArrasteMultiplo(PainelDesenho painelDesenho) {
		super(painelDesenho);
		pontos = new ArrayList<Ponto>();
	}
	
	public void mousePressed(MouseEvent evt) {
		if (SwingUtilities.isLeftMouseButton(evt)) {
			if (pontos.isEmpty()) {
				pontoAtual = new Ponto((double) evt.getX(), (double) evt.getY());
				pontos.add(pontoAtual);
				TipoImagem tipoImagem = GerenciadorUI.getInstance().getPainelBotoes().getTipoImagemSelecionada();
				Imagem imagem = FabricaImagens.criarImagem(tipoImagem, pontos);
				painelDesenho.setImagemEmConstrucao(imagem);
			}
			else {
				pontoAtual = new Ponto((double) evt.getX(), (double) evt.getY());
				painelDesenho.getImagemEmConstrucao().atualizar(pontoAtual);
			}
		}
		else if (SwingUtilities.isRightMouseButton(evt)) {
			painelDesenho.getImagemEmConstrucao().setFinalizada(true);
		}
		painelDesenho.repaint();
	}

	public void mouseReleased(MouseEvent evt) {
		if (SwingUtilities.isLeftMouseButton(evt)) {
			pontos.add(pontoAtual);
			pontoAtual = null;
		}
		else if (SwingUtilities.isRightMouseButton(evt)) {
			painelDesenho.adicionar(painelDesenho.getImagemEmConstrucao());
			painelDesenho.clearImagemEmConstrucao();
			reset();
		}
		painelDesenho.repaint();
	}
	
	private void reset() {
		pontoAtual = null;
		pontos = new ArrayList<Ponto>();
	}
}